<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var n = 0;

        function a() {
            var n = 10; //b函数执行里面的n++导致n为11
            //执行c函数导致n++为12

            function b() {
                n++;
                console.log(n);
            }
            b();
            return b;
        }
        var c = a();
        c();
        console.log(n);
        /* 
            c的值是a函数返回的值也就是b函数的地址值
            a函数执行的时候首先开辟了新的内存空间，然后在执行a函数中的代码，a函数里面的b函数也调用了，
            并且b函数用到了a函数中的变量n,形成闭包第一次打印的值为11,b函数执行完毕后就销毁了,
            a函数执行后的新的内存空间在return之后没有被销毁        
            c函数调用,也是用到了闭包，所以这个时候的值为12
            最后输出的是全局的n值为0
            我之前错的地方是,认为b函数执行完毕后立即销毁了，其实b没有被销毁而是作为返回值返回出去给c变量了，准确说是b函数的地址值
         */
    </script>
</body>

</html>